package common

// 共享类型定义，避免循环依赖
// 这些类型被main包、http包、tcp包共同使用

// TunnelMessage 隧道消息结构
type TunnelMessage struct {
	Magic        uint32       // 魔数
	Version      uint32       // 版本
	MessageType  uint32       // 消息类型
	ProtocolType ProtocolType // 协议类型（HTTP/TCP/SSH等）
	TunnelID     string       // 隧道ID (36字节 UUID)
	RequestID    string       // 请求ID (36字节 UUID)
	ConnectionID string       // 连接ID (36字节 UUID)
	BodyLength   uint64       // Body 长度
	Reserved     [12]byte     // 保留字段（12字节，未来扩展）
	Body         []byte       // 消息体
}

// ProtocolType 协议类型
type ProtocolType uint8

const (
	ProtocolHTTP ProtocolType = 1 // HTTP协议
	ProtocolTCP  ProtocolType = 2 // TCP协议
	ProtocolSSH  ProtocolType = 3 // SSH协议（预留）
	ProtocolRDP  ProtocolType = 4 // RDP协议（预留）
)

// String 返回协议类型的字符串表示
func (p ProtocolType) String() string {
	switch p {
	case ProtocolHTTP:
		return "HTTP"
	case ProtocolTCP:
		return "TCP"
	case ProtocolSSH:
		return "SSH"
	case ProtocolRDP:
		return "RDP"
	default:
		return "UNKNOWN"
	}
}

// 常量定义
const (
	ProtocolVersion uint32 = 0x00000002 // 协议版本
	HeaderSize      int    = 144        // 消息头大小

	// 消息类型
	MessageTypeRequest  uint32 = 1 // 请求消息
	MessageTypeResponse uint32 = 2 // 响应消息
	MessageTypeError    uint32 = 3 // 错误消息

	// 分块相关
	ChunkSize uint64 = 32 * 1024 // 32KB
)
